home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Carnage_Contest / scripts / CC Original / weapons / Glue Grenade.lua < prev    next >
Text File  |  2010-08-31  |  6KB  |  174 lines

  1. --------------------------------------------------------------------------------
  2. -- Weapon Glue Grenade + Projectile Glue Grenade
  3. -- Original Carnage Contest Weapon
  4. -- Script by DC, August 2009, www.UnrealSoftware.de
  5. --------------------------------------------------------------------------------
  6.  
  7. -- Setup Tables
  8. if cc==nil then cc={} end
  9. cc.gluegrenade={}
  10. cc.gluegrenade.gluegrenade={}
  11.  
  12. -- Load & Prepare Ressources
  13. cc.gluegrenade.gfx_wpn=loadgfx("weapons/gluegrenade.bmp")                -- Weapon Image
  14. setmidhandle(cc.gluegrenade.gfx_wpn)
  15. cc.gluegrenade.sfx_attack=loadsfx("throw.ogg")                            -- Attack Sound
  16.  
  17. --------------------------------------------------------------------------------
  18. -- Weapon: Glue Grenade
  19. --------------------------------------------------------------------------------
  20.  
  21. cc.gluegrenade.id=addweapon("cc.gluegrenade","Glue Grenade",cc.gluegrenade.gfx_wpn,1)    -- Add Weapon (1 use)
  22.  
  23. function cc.gluegrenade.draw()                                            -- Draw
  24.     if weapon_shots<=0 then
  25.         setblend(blend_alpha)
  26.         setalpha(1)
  27.         setcolor(255,255,255)
  28.         drawinhand(cc.gluegrenade.gfx_wpn,6,0)
  29.     end
  30.     -- HUD chargebar
  31.     if weapon_charge>0 and weapon_shots==0 then
  32.         hudchargebar(weapon_charge,100)
  33.     end
  34.     -- HUD Crosshair / HUD Timer
  35.     if weapon_shots==0 then
  36.         hudcrosshair(4,3)
  37.         hudtimer(3,1,10)
  38.     end
  39. end
  40.  
  41. function cc.gluegrenade.attack(attack)                                    -- Attack
  42.     if (weapon_shots<=0) then
  43.         -- Charge
  44.         if (attack==1) then
  45.             weapon_charge=weapon_charge+1                            -- Increase charge
  46.         end
  47.         -- Fire a projectile (on release/full charge)
  48.         if (attack==0 and weapon_charge>0) or (weapon_charge>=100) then
  49.             -- No more weapon switching!
  50.             useweapon(0)
  51.             playsound(cc.gluegrenade.sfx_attack)
  52.             weapon_shots=weapon_shots+1
  53.             id=createprojectile(cc.gluegrenade.gluegrenade.id)
  54.             projectiles[id]={}
  55.             -- Ignore collision with current player at beginning
  56.             projectiles[id].ignore=playercurrent()
  57.             -- Set initial position of projectile
  58.             projectiles[id].x=getplayerx(0)+(4*getplayerdirection(0))
  59.             projectiles[id].y=getplayery(0)+3
  60.             -- Initial collision check (avoid throwing into other objects)
  61.             for i=0,10,1 do
  62.                 if collision(col5x5,projectiles[id].x+math.sin(math.rad(getplayerrotation(0)))*i,projectiles[id].y-math.cos(math.rad(getplayerrotation(0)))*i)==1 then
  63.                     if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  64.                         if (i==0) then
  65.                             projectiles[id].x=getplayerx(0)
  66.                             projectiles[id].y=getplayery(0)+3
  67.                             break
  68.                         else
  69.                             projectiles[id].x=getplayerx(0)+(4*getplayerdirection(0))+math.sin(math.rad(getplayerrotation(0)))*(i-1)
  70.                             projectiles[id].y=getplayery(0)+3-math.cos(math.rad(getplayerrotation(0)))*(i-1)
  71.                             break
  72.                         end
  73.                     end
  74.                 end
  75.             end
  76.             -- Set speed of projectile
  77.             projectiles[id].sx=math.sin(math.rad(getplayerrotation(0)))*(weapon_charge/100.0)*10.0
  78.             projectiles[id].sy=-math.cos(math.rad(getplayerrotation(0)))*(weapon_charge/100.0)*10.0
  79.             -- Set timer
  80.             projectiles[id].timer=weapon_timer*50
  81.             -- Collided
  82.             projectiles[id].collided=0
  83.             -- Effects
  84.             recoil(2)
  85.             -- End Turn
  86.             endturn()
  87.         end
  88.     end
  89. end
  90.  
  91. --------------------------------------------------------------------------------
  92. -- Projectile: gluegrenade
  93. --------------------------------------------------------------------------------
  94.  
  95. cc.gluegrenade.gluegrenade.id=addprojectile("cc.gluegrenade.gluegrenade")    -- Add Projectile
  96.  
  97. function cc.gluegrenade.gluegrenade.draw(id)                                -- Draw
  98.     -- Setup draw mode
  99.     setblend(blend_alpha)
  100.     setalpha(1)
  101.     setcolor(255,255,255)
  102.     setscale(1,1)
  103.     -- Calculate projectile rotation
  104.     setrotation(math.deg(math.atan2(projectiles[id].sx,-projectiles[id].sy)))
  105.     -- Draw projectile
  106.     drawimage(cc.gluegrenade.gfx_wpn,projectiles[id].x,projectiles[id].y)
  107.     -- Draw Arrow if out of Screen
  108.     outofscreenarrow(projectiles[id].x,projectiles[id].y)
  109. end
  110.  
  111. function cc.gluegrenade.gluegrenade.update(id)                                -- Update
  112.     -- Gravity influence on speed
  113.     projectiles[id].sy=projectiles[id].sy+getgravity()
  114.     -- Move (in substep loop for optimal collision precision)
  115.     if projectiles[id].collided==0 then
  116.         msubt=math.ceil(math.max(math.abs(projectiles[id].sx),math.abs(projectiles[id].sy))/3)
  117.         msubx=projectiles[id].sx/msubt
  118.         msuby=projectiles[id].sy/msubt
  119.         for i=1,msubt,1 do
  120.             -- Move X
  121.             projectiles[id].x=projectiles[id].x+msubx
  122.             if collision(col5x5,projectiles[id].x,projectiles[id].y)==1 then
  123.                 if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  124.                     projectiles[id].collided=1
  125.                     playsound(sfx_splatter5)
  126.                     terrainalphaimage(gfx_blood25,projectiles[id].x,projectiles[id].y,0.7,200,200,0)
  127.                     break
  128.                 end
  129.             else
  130.                 projectiles[id].ignore=0
  131.             end
  132.             -- Move Y
  133.             projectiles[id].y=projectiles[id].y+msuby
  134.             if collision(col5x5,projectiles[id].x,projectiles[id].y)==1 then
  135.                 if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  136.                     projectiles[id].collided=1
  137.                     playsound(sfx_splatter5)
  138.                     terrainalphaimage(gfx_blood25,projectiles[id].x,projectiles[id].y,0.7,200,200,0)
  139.                     break
  140.                 end
  141.             else
  142.                 projectiles[id].ignore=0
  143.             end        
  144.             -- Water
  145.             if (projectiles[id].y)>getwatery()+5 then
  146.                 -- Effects
  147.                 particle(p_waterhit,projectiles[id].x,projectiles[id].y)
  148.                 playsound(sfx_hitwater1)
  149.                 -- Free projectile
  150.                 freeprojectile(id)
  151.                 break
  152.             end
  153.         end
  154.     end
  155.     -- Timer -> Explode
  156.     projectiles[id].timer=projectiles[id].timer-1
  157.     if projectiles[id].timer<=0 then
  158.         -- Cause damage
  159.         arealdamage(projectiles[id].x,projectiles[id].y,100,50)
  160.         -- Destroy terrain
  161.         terrainexplosion(projectiles[id].x,projectiles[id].y,30,1)
  162.         -- Crater
  163.         grey=math.random(0,40)
  164.         if math.random(0,1)==1 then
  165.             terrainalphaimage(gfx_crater100,projectiles[id].x,projectiles[id].y,math.random(6,9)*0.1,grey,grey,grey)
  166.         else
  167.             terrainalphaimage(gfx_crater125,projectiles[id].x,projectiles[id].y,math.random(6,9)*0.1,grey,grey,grey)
  168.         end
  169.         -- Free projectile
  170.         freeprojectile(id)
  171.     end
  172.     -- Scroll to projectile
  173.     scroll(projectiles[id].x,projectiles[id].y)
  174. end